﻿using Vk.Methods.Common;

namespace Vk.Methods.Groups
{
    /// <summary>
    ///     Базовая сущность группы
    /// </summary>
    public class BaseGroup : BaseEntity
    {
        /// <summary>
        ///     Полномочия текущего пользователя
        /// </summary>
        public AdminLevel? AdminLevel { get; set; }

        /// <summary>
        ///     Возвращается в случае, если сообщество удалено или заблокировано:
        ///     deleted — удалено;
        ///     banned — заблокировано;
        /// </summary>
        public string Deactivated { get; set; }

        /// <summary>
        ///     Флаг, является ли пользователь адмиистратором
        /// </summary>
        public bool? IsAdmin { get; set; }

        /// <summary>
        ///     Является ли сообщество закрытым. Возможные значения:
        ///     0 — открытое;
        ///     1 — закрытое;
        ///     2 — частное.
        /// </summary>
        public short? IsClosed { get; set; }

        /// <summary>
        ///     Флаг, является ли пользователь участником группы
        /// </summary>
        public bool? IsMember { get; set; }

        /// <summary>
        ///     Название
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        ///     Ссылка на изображение
        /// </summary>
        public string Photo { get; set; }

        /// <summary>
        ///     Ссылка на изображение большого размера
        /// </summary>
        public string PhotoBig { get; set; }

        /// <summary>
        ///     Ссылка на изображение среднего размера
        /// </summary>
        public string PhotoMedium { get; set; }

        /// <summary>
        ///     Короткое название
        /// </summary>
        public string ScreenName { get; set; }

        /// <summary>
        ///     Тип сообщества
        /// </summary>
        public GroupType? Type { get; set; }

        public BaseGroup(ApiNode node)
        {
            Id = node.Int("id");
            Name = node.String("name");
            ScreenName = node.String("screen_name");
            IsClosed = node.Short("is_closed");
            Deactivated = node.String("deactivated");
            IsAdmin = node.Bool("is_admin");
            if (IsAdmin.HasValue && IsAdmin.Value)
            {
                AdminLevel = (AdminLevel?) node.Int("admin_level");
            }
            IsMember = node.Bool("is_member");
            Photo = node.String("photo_50");
            PhotoMedium = node.String("photo_100");
            PhotoBig = node.String("photo_200");
            Type = node.Enum<GroupType>("type");
        }
    }
}